package com.example.d6_lambda;

/**
 * 目标：认识Lambda表达式
 */
public class LambdaTest1 {
    public static void main(String[] args) {
//        Animal a = new Animal() {
//            @Override
//            public void run() {
//                System.out.println("run");
//            }
//        };
//        a.run();

        // 注意lambda表达式不是可以简化所有的匿名内部类,只能简化函数式接口的匿名内部类
        /*
        lambda表达式的格式：
        (被重写方法的形参列表) -> {
            被重写方法的方法体代码;
        }

        什么是函数式接口,有且仅有一个抽象方法 （注意：不能是抽象类,只能是接口）
        大部分的函数式接口上面都会有一个@FunctionalInterface注解 有这个注解一定是函数式接口
         */

        // 错误的写法
//        Animal a = () -> {
//            System.out.println("run");
//        }
//        a.run();

//        Swimming s = new Swimming() {
//            @Override
//            public void swim() {
//                System.out.println("游泳");
//            }
//        };
//        s.swim();

        // 使用lambda表达式简化
        Swimming s = () -> {
            System.out.println("游泳");
        };
        s.swim();
    }
}

interface Swimming {
    void swim();
}

abstract class Animal {
    public abstract void run();
}